SLZ1 format:
FS5 (and FS4) use compressed executables and script files. The compression is a SLZ1 format. A tool called slz.com will decode and re-encode the files.

UNT format:

As of FS5, all the unit information is stored in a single stage.unt file, in sequence. The FS game program can handle both uncompressed and SLZ1 compressed stage.unt files.

All numbers are in HEX format (so 100 is written as 64, being 6*16^1 + 4*16^0). All numbers are separated by 0x00 fields (those fields are used for numbers greater than 255, but that rarely happens, except in case of experience points).

The first byte indicates the total number of units on a map, including the player units.
After the unit counter come the player units, and after them the monsters. I don't know if this order is mandatory, but It won't hurt to keep it that way. An order for monsters seems to be nonexistant, although monsters higher in the list move before those lower in the list.

There are 15 values per unit, for a total of 30 bytes per unit entry. The order of the numbers is:
- Cooridnate horizontal
- Coordinate vertical
- Unknown
- Monster type
- Level
- Max HP (0 = unit dies after one round)
- Initial HP (If set higher than Max, will drop to max on the second turn)
- EXP
- ATT
- DEF
- WIS
- MAG.DEF.
- AGL
- AI
- Weapon

MSG format:
[name][fill up to 13 bytes][34 bytes text]

Scenario codes:

0x00%0x00 = clear dialog boxes.
0x00&0x00 = centers text

#n = scenario tag, n is the identifier.

0x00 = line break. First character after a line break:
    k = wait-for-click after this line (may follow speaker ident)
    w = dunno, messes up text if used
    a = ends conversation, don't know exact function
    q = ends conversation, don't know exact function
    e = return control to map engine

<00@tt = standard format for conversation sections. < and > determisne the
         box the text appears in. Substitute 0x00 for @.
         The first two numbers represent the portrait index. (directly related 
         to the facexx.gem files in the program directory) See below. A . 
         character (0x2E) instead of the numbers seems to mean 'keep current 
         portrait'. tt is the speaker identifier field (see below).
         
         As of FS4 the script uses identifiers for the speaker name instead of 
         number references. This means text can't start directly after a 0x00. 
         A space character solves this. To produce a non-spear dialog box (no name, 
         no portrait, more space for text), I have seen a >.(0x00).0 construction.
         Identifiers:
            ku = Kushna
            ak = Ackbar
            pw = Paul
            sh = Shay
            ge = Geruda
            wi = Winnia
            lk = King Rulphan
            bu = Bacchus
            he = Henry
            ji = Jil
            el = Spirit
            la = Raffael
            ti = Tiam
            ma = Manti
            lu = Lucieda

/n = color coding.
* = normal text
1 = beige
2 = darker beige
3 = dark brown
4 = brown
5 = moss green
6 = green
7 = light yellow
8 = blue
9 = orange
0 = black
a = red
b = light blue
c = light brown
d = grey
e = brown
f = white

Replace 00 -> 0D 0A
Edit
Replace 0D 0A -> 00

Portraits

00 = Kushna, smiling
01 = Kushna, happy
02 = Kushna, sad
03 = Kushna, troubled
04 = Kushna, angry
06 = Kushna, surprised
07 = Kushna, crying
10 = Shay (scar), smiling
11 = Shay (scar), angry
12 = Shay (scar), troubled
13 = Shay (scar), happy smile
14 = Shay (scar), nonplussed
15 = Shay (scar), sad
20 = Winnia, smiling
21 = Winnia, sad
22 = Winnia, happy
23 = Winnia, angry
24 = Winnia, afraid
25 = Winnia, grinning
30 = Raffael, determined
31 = Raffael, angry 
32 = Raffael, troubled
33 = Raffael, sad
34 = Raffael, happy
40 = Bacchus, smiling
41 = Bacchus, sad
42 = Bacchus, surprised
43 = Bacchus, angry
44 = Bacchus, happy yet slightly frightening smile
50 = Northe, normal
51 = Northe, smiling
52 = Northe, angry (rare collectors item)
60 = Pony, normal
61 = Pony, pissed
62 = Aaron, normal
63 = Aaron, frowning
64 = Aaron, laughing
65 = Aaron, angry
70 = Lucieda, smiling
71 = Lucieda, surprised
72 = Lucieda, angry 
73 = Lucieda, happy
80 = Gnome
81 = Sylph
82 = Salamander
83 = Undine
90 = Shay (bandanna), smiling
91 = Shay (bandanna), angry
92 = Shay (bandanna), troubled
93 = Shay (bandanna), happy smile
94 = Shay (bandanna), nonplussed
95 = Shay (bandanna), sad
A0 = Paul, troubled
A1 = Paul, angry
A2 = Paul, normal
A3 = Paul, dying
B1 = King Rulphan, normal
B2 = King Rulphan, angry
B3 = King Rulphan, buying the farm
C0 = Village chief
C1 = Mother, in distress
C2 = Mother, relieved
C3 = Kid, happy to see mom
D0 = Jil, angry
D1 = Jil, smiling
D2 = 
D3 = Jerokice, smiling
D4 = Jerokice, afraid
D5 = Tiam, smiling
D6 = Tiam, dying
D7 = Manti, smiling
D8 = Manti, not-so-smiling
E0 = Henry, clearly not having a good day.
E1 = Henry, DEFINITELY not having a great day.
G0 = Nukes, lookin' good
G1 = Nukes, lookin' like shit
I0 = Geruda, smiling
I1 = Geruda, laughing evilly
I2 = Geruda, really surprised
J0 = Ackbar, Evil version, smiling
J1 = Ackbar, Evil version, sad
J2 = 
J3 = Ackbar, Evil version, Damn pissed
J4 = Ackbar, smiling

Spirit notes:

Gnome: 3 squares movement. Defender. (+24/+24 x3) -> (+22/+10 x3)

18 00 18 00 00 00 00 00
16 00 0A 00 00 00 00 00

Sylph: 3 squares movement. Defender. (+24/+24 x2) -> (+12/+26 x2)

18 00 18 00 00 00 00 00
0C 00 1A 00 00 00 00 00

Salamander: 5 squares movement. Attacker. (+16/+16 x3) -> (+10/+20 x3)

10 00 10 00 00 00 00 00
0A 00 14 00 00 00 00 00

Undine: 3 squares movement. Defender. (+16/+16 x1) -> (+36/+16 x1)

10 00 10 00 00 00 00 00
24 00 10 00 00 00 00 00

#EOF